const { invalidGoodsId, invalidCartId } = require("../constant/error.type");
const Goods = require("../model/goods.model");
const Cart = require("../model/cart.model");

/**
 * 检验商品是否存在
 * @param {*} ctx 请求上下文
 * @param {*} next 放行函数
 */
const verifyGoodsId = async (ctx, next) => {
  const { goods_id } = ctx.request.body;
  const goods = await Goods.findOne({ where: { id: goods_id } });
  // 如果物品不存在，返回错误
  if (goods === null) {
    return ctx.app.emit("error", invalidGoodsId, ctx);
  }
  // 检验通过，交由下一个中间件处理
  await next();
};

/**
 * 检验购物车项是否存在
 * @param {*} ctx 请求上下文
 * @param {*} next 放行函数
 */
const verifyCartId = async (ctx, next) => {
  const { id } = ctx.request.params;
  const cart = await Cart.findOne({ where: { id: id } });
  // 如果购物车项不存在，返回错误
  if (cart === null) {
    return ctx.app.emit("error", invalidCartId, ctx);
  }
  // 检验通过，交由下一个中间件处理
  await next();
};

module.exports = { verifyGoodsId, verifyCartId };
